iT邦幫忙

2023 iThome 鐵人賽

DAY 25
0
Software Development

從零開始!使用chatGPT製作Unity回合制卡牌遊戲系列 第 25

從零開始!使用chatGPT製作Unity回合制卡牌遊戲 Day 25 - Unity跨場景傳輸變數:GameObject Instance

  • 分享至 

  • xImage
  •  

昨天我們介紹了PlayerPrefs來傳送變數的用法,今天..
我們來介紹其他更猛烈的傳輸方式。

有兩種方法:

  1. Static variable
  2. DontDestroyOnLoad

我們先介紹Static variable的做法。


Static Variable,也就是靜態變數。
他會是在多個物件實體中共享的變數。
也就是說,倘若有多張相同遊戲「卡牌」,
他們有個效果是「使所有的該卡牌都減少一點費用」,
則我們可以用這種方案實作。


另外一種方法則是不摧毀遊戲物件,使用函式DontDestroyOnLoad。

舉例來說,我們建立一個遊戲物件GameController,用來放置我們的GameController程式碼。

using UnityEngine;

public class GameController : MonoBehaviour
{
    public static GameController instance;

    // Player data
    public string playerName;
    public int gold;
    public string[] ownedCards;

    void Awake()
    {
        // Singleton pattern to ensure only one instance of GameController exists
        if (instance == null)
        {
            instance = this;
            DontDestroyOnLoad(gameObject);
        }
        else
        {
            Destroy(gameObject);
        }
    }
}

然後我們在其他地方就可以使用一些函式來更新「Player Data」,例如:

// Example of setting player data
GameController.instance.playerName = "John Doe";
GameController.instance.gold = 100;
GameController.instance.ownedCards = new string[] { "Card1", "Card2", "Card3" };

然後在另一個場景內,讀取前一個場景的玩家資料:

// Example of accessing player data
string playerName = GameController.instance.playerName;
int gold = GameController.instance.gold;
string[] ownedCards = GameController.instance.ownedCards;

如果是大量多種玩家資料,且頻繁需要搬移,
則不宜使用PlayerPrefs這種儲存字串來轉移的方式,
而是推薦今天介紹的DontDestroyOnLoad與該遊戲物件所儲存的各種純值或陣列變數。


上一篇
從零開始!使用chatGPT製作Unity回合制卡牌遊戲 Day 24 - Unity Scene:跨場景傳輸變數PlayerPrefs
下一篇
從零開始!使用chatGPT製作Unity回合制卡牌遊戲 Day 26 - 2D Unity關卡製作:使用Tilemap system的原因
系列文
從零開始!使用chatGPT製作Unity回合制卡牌遊戲30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言